Git 版本控制工具

什么是git? 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目 , 有效提高团队协作能和代码版本的管理问题.

目前工作流中使用版本控制系统主要有:SVN(集中式) 和 Git(分布式) SVN 与 Git的区别

SVN 是一个集中式管理系统(所有项目代码统一集中管理)


Git 是一个分布式管理系统(每台终端设备既是终端也是一个本地的仓库 ,也会有一个集中管理仓库)
认识git 中的几个概念:
1.工作区 : 就是你在电脑里能看到的目录。

2.暂存区 :英文叫stage, 或index。一般存放在 ".git目录下" 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。

3.版本库(仓库) : 本地电脑上工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

4.远程仓库(版本库):在远程端(服务器上)的一个仓库

HEAD : 用于指向当前工作中的分支或节点

在vscode编辑器中设置使用的终端为git的bash.exe , 不用windows 自带的cmd.exe ,这样有一些更友好的界面和提示:

在vscode的设置中 - > 功能- > 终端 -> Intergrated- shell - Windows 位置下 ,点击 在settings.json 中编辑 ,然后添加以下配置:

"terminal.integrated.shell.windows": "C:\\Program Files\\Git\\bin\\bash.exe"

git的常用命令:
git工具的命令都是在命令通过git 指令开始 :

1. 克隆远程仓库: git clone https://github.com/jquery/jquery.git  
2. 初始化仓库  (为了生成.git 目录 :暂存区 ,版本库的,配置文件信息等)
3. 查看当前的工作状态 : git status (查看到当前工作区中的文件,哪些已经改动的文件是否已经加入到暂存区(红色:未加入, 绿色加入))
4. 将工作区变动的文件添加到暂存区: git add .  (.代表一切改动文件 ,也可以直接使用文件名)
5. 将暂存区的文件提交到本地版本库: git commit -m '项目首次提交'
6. 如果是首次使用git , 一般会提示需要设置提交者的个人信息 
    1. git config --global user.email "Timor-m@foxmail.com"
    2. git config --global user.name "Timor-m"
    3. 再一次commit提交到本地仓库即可

7.使用git log 查看所有的提交记录 (git log -p -2) -p显示详情 -2显示最近的两次提交记录
8.git checkout 节点的名称/分支的名称  将工作区内容切换到指定的节点或者分支
9.推送到远程端仓库:git push 
10.设置一个远程仓库地址 :git remote add 仓库名称 仓库地址  
11.从远程端仓库拉取最新的更新到本地仓库:git pull 
git的使用工作流程:
1.初始化仓库 git init / 通过克隆远程端的仓库 git clone 仓库地址
2.git status 查看当前工作区的状态 (非必须)
3.git add . 将变化的文件添加到暂存区
4.git commit -m '本次提交的一些备注' 
将本地仓库推送到远程仓库
1.先确认本地仓库中是否有配置过远程的仓库地址:
    1.git remote add origin https://gitee.com/Timor-M/iExam.git (设置一个本地名为origin的远程仓库)   
    2.git branch --set-upstream-to=origin/master master (设置一个从本地的master分支提交到远程仓库origin的master的映射关系)
    3.因为每次提交都需要把远程的最新的记录要先拉取下来,所以一般在push之前需要pull一次,但是如果遇到有没有相关的提交记录,git会默认拒绝合并拉取回来的项目代码,所以可以在git pull的时候添加一个参数 --allow-unrelated-histories(允许合并两个不相关的记录) : git pull --allow-unrelated-histories
    到此应该就没什么问题了..

2.可以直接将远程的仓库先克隆一份到本地,这样就省去了一些配置过程,克隆过来的仓库已经配置好地址了.
对于一些不需要或者错误的操作的撤销:
1.撤销暂存区的文件
    git reset HEAD 
2.撤销对文的修改操作
    git checkout -- 文件名
分支的使用:可以在不影响到主线上,进行的开发(突发发现主线Bug , 项目的迭代版本 ,开发版本) 相当于克隆多份项目代码进行开发 ,不会彼此影响
创建分支: git brance dev (可以带 -b 参数:创建一个新分支并且切换到新分支 )
首次提交会需要执行一个设置提交分支 : git push --set-upstream origin dev

合并分支:(把dev分支合并到master分支)
    1.需要先切换到master主分支
    2. git merge dev (把新开发的功能dev分支 ,合并到主线分支master)


删除(本地)分支:git branch --delete dev
删除远程分支: git push origin --delete dev  
提交冲突问题:(多协作或者多分支操作的时候会遇到提交分支冲突,需要解决冲突后再重现提交)
场景:
小A此时拉取了远程仓库上最新的代码(此时小A,小B本地仓库代码一样的了) , 然后开始修改了a.txt 文件 , 然后又直接提交到了远程仓库
同时小B 也修改了a.txt , 然后也直接提交到仓库 ,此时就会遇到一个提交的提示,告知需要把远程仓库的最新代码拉取下来才能提交,所以此时又得使用git pull命令,拉取最新的内容 ,但是因为本地以及修改过a.txt ,而且远程仓库上的变更也是修改了a.txt文件 ,所以此时就会冲突,需要手动解决冲突后,才可以继续提交

解决: 手动把 <<<<< ======= <<<<< 标记代码去除掉, 把需要的代码留下 ,然后再使用 git add .  和git commit 提交 后 再推送到服务器即可.
(如果更新的文件和需要提交的文件不相同,则会自动合并两个分支的内容 ,主要是同一个文件的变更,需要手动确认)

设置项目一些文件或者文件目录不需要提交到仓库(忽略目录)


1.创建一个 .gitignore 文件在git 项目的根目录下
touch .gitignore   (使用命令创建文件)

2.添加需要被忽略的文件及目录 .gitignore info.txt


设置完之后 ,每次的提交变更都会忽略掉设置的那些文件 也不再检测